home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / dos_win / winsock / maillist / 94-05.Z / 94-05 / text0237.txt < prev    next >
Encoding:
Text File  |  1994-05-31  |  14.2 KB  |  506 lines

  1. I am having problems getting up to speed with Windows Sockets.  For
  2. starters I am trying to send a packet from one place to another.  The
  3. recv() and recvfrom() functions seem to wait infinitely.  The send() and
  4. sendto() function always returns with WSAEINVAL.
  5.  
  6. swelch@nmsu.edu
  7.  
  8. --- cut ----
  9.  
  10.  
  11. //GetProfileString()
  12.  
  13. #include <windows.h>
  14. #define _INC_WINDOWS
  15. #include <winsock.h>
  16.  
  17. WSADATA wsaData;
  18.  
  19. void SocketError ( char *,int );
  20. long FAR PASCAL _export WndProc (HWND, UINT, UINT, LONG) ;
  21. unsigned char OpenWinsock ( void );
  22. unsigned char BodyWinsock ( void );
  23. void CloseWinsock ( void );
  24. char appname[40];
  25.  
  26. int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance,LPSTR lpszCmdLine,
  27.     int nCmdShow)
  28. {
  29.     static char szAppName[]="sock";
  30.     HWND hwnd;
  31.     MSG msg;
  32.     WNDCLASS wndclass;
  33.  
  34.     if(OpenWinsock()) return(0);
  35.  
  36.     if(!hPrevInstance)
  37.     {
  38.         wndclass.style        =CS_HREDRAW|CS_VREDRAW;
  39.         wndclass.lpfnWndProc  =WndProc;
  40.         wndclass.cbClsExtra   =0;
  41.         wndclass.cbWndExtra   =0;
  42.         wndclass.hInstance    =hInstance;
  43.         wndclass.hIcon        =LoadIcon(NULL,IDI_APPLICATION);
  44.         wndclass.hCursor      =LoadCursor(NULL,IDC_ARROW);
  45.         wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
  46.         wndclass.lpszMenuName =NULL;
  47.         wndclass.lpszClassName=szAppName;
  48.         RegisterClass (&wndclass) ;
  49.     }
  50.     hwnd=CreateWindow (szAppName,appname,WS_OVERLAPPEDWINDOW,
  51.         CW_USEDEFAULT,CW_USEDEFAULT,250,280,NULL,NULL,hInstance,NULL);
  52.  
  53.     ShowWindow(hwnd,nCmdShow);
  54.     UpdateWindow(hwnd);
  55.  
  56.     while(GetMessage(&msg,NULL,0,0))
  57.     {
  58.         TranslateMessage(&msg);
  59.         DispatchMessage (&msg);
  60.     }
  61.  
  62.     CloseWinsock();
  63.  
  64.     return(msg.wParam);
  65. }
  66.  
  67. long FAR PASCAL _export WndProc(HWND hwnd,UINT message,UINT wParam,LONG lParam)
  68. {
  69.      static HWND hwndButton[64];
  70.      char sa[8];
  71.      int i;
  72.  
  73.      switch(message)
  74.      {
  75.         case WM_CREATE:
  76.         /*
  77.             for(i=0;i<64;i++)
  78.             {
  79.                 wsprintf(sa,"%02u",i);
  80.                 hwndButton[i]=CreateWindow("button",sa,
  81.                     WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,(i&7)*30,(i>>3)*30,30,30,
  82.                     hwnd,i,((LPCREATESTRUCT)lParam)->hInstance,NULL);
  83.             }
  84. */
  85.             PostMessage(hwnd,WM_COMMAND,0,0);
  86.             return(0);
  87.  
  88.         case WM_SIZE:
  89.             break;
  90.  
  91.         case WM_PAINT:
  92.             break;
  93.  
  94.         case WM_COMMAND:
  95.             BodyWinsock();
  96.             PostQuitMessage(0);
  97.  
  98.  
  99.         /*
  100.             switch(wParam)
  101.             {
  102.             }
  103.             as seen in the CreateWindow() above (WM_CREATE) the wParam is 0-63
  104.         */
  105.             return(0);
  106.  
  107.         case WM_DRAWITEM:
  108.             break;
  109.  
  110.         case WM_DESTROY:
  111.             PostQuitMessage(0);
  112.             return(0);
  113.     }
  114.     return DefWindowProc(hwnd,message,wParam,lParam);
  115. }
  116.  
  117. unsigned char OpenWinsock ( void )
  118. {
  119.     unsigned char gstring[80];
  120.     int ia;
  121.     HOSTENT *host;
  122.  
  123.     if(WSAStartup(0x0101,&wsaData))
  124.     {
  125.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  126.         return(1);
  127.     }
  128.  
  129.     if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
  130.     {
  131.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  132.         WSACleanup();
  133.         return(1);
  134.     }
  135.     wsaData.wVersion=0x0101;
  136.     wsaData.wHighVersion=0x0101;
  137.  
  138.     ia=gethostname(gstring,80);
  139.     if(ia)
  140.     {
  141.         SocketError("gethostname error",WSAGetLastError());
  142.     }
  143.     else
  144.     {
  145. //        MessageBox(NULL,gstring,"gethostname SUCCESS",MB_OK);
  146.         host=gethostbyname(gstring);
  147.         if(host==NULL)
  148.         {
  149.             SocketError("gethostbyname error",WSAGetLastError());
  150.             return(1);
  151.         }
  152.         else
  153.         {
  154.             if(host[0].h_addrtype!=2)
  155.             {
  156.                 MessageBox(NULL,"Unknown addres type",appname,MB_OK);
  157.                 return(1);
  158.             }
  159.             if(host[0].h_length!=4)
  160.             {
  161.                 MessageBox(NULL,"Unknown address length",appname,MB_OK);
  162.                 return(1);
  163.             }
  164.             wsprintf(appname,"%s %u.%u.%u.%u S",host[0].h_name,(unsigned char)host[0].h_addr_list[0][0],(unsigned char)host[0].h_addr_list[0][1],(unsigned char)host[0].h_addr_list[0][2],(unsigned char)host[0].h_addr_list[0][3]);
  165. //            MessageBox(NULL,appname,"gethostbyname SUCCESS",MB_OK);
  166.         }
  167.     }
  168.  
  169.     return(0);
  170. }
  171.  
  172. unsigned char BodyWinsock ( void )
  173. {
  174.     unsigned char gstring[80];
  175.     SOCKET sock;
  176.     int ia;
  177.     SOCKADDR_IN sin;
  178.     SOCKADDR s;
  179.  
  180.     sock=socket(PF_INET,SOCK_DGRAM,0);
  181.     if(sock==INVALID_SOCKET)
  182.     {
  183.         SocketError("socket error",WSAGetLastError());
  184.         return(1);
  185.     }
  186.  
  187. // select() to check status before sending another
  188. /*    ia=sendto(sock,gstring,20,MSG_DONTROUTE,(LPSOCKADDR)&sin,sizeof(sin)); */
  189.  
  190.     wsprintf(gstring,"%s","HELLO THERE");
  191.  
  192.     sin.sin_family=AF_INET;
  193.     sin.sin_addr.s_net  =192;
  194.     sin.sin_addr.s_host =9;
  195.     sin.sin_addr.s_lh   =200;
  196.     sin.sin_addr.s_impno=6;
  197.  
  198.     s.sa_family=AF_INET;
  199.     s.sa_data[2]=192;
  200.     s.sa_data[3]=9;
  201.     s.sa_data[4]=200;
  202.     s.sa_data[5]=6;
  203.  
  204. /*
  205.     ia=connect(sock,(LPSOCKADDR)&sin,sizeof(sin));
  206.     if(ia)
  207.     {
  208.         SocketError("connect error",WSAGetLastError());
  209.     }
  210.  
  211.     ia=send(sock,gstring,20,MSG_DONTROUTE);
  212. */
  213. /*  ia=sendto(sock,gstring,20,0,(LPSOCKADDR)&sin,sizeof(sin));*/
  214.     ia=sendto(sock,gstring,20,MSG_DONTROUTE,&s,sizeof(s));
  215.  
  216.  
  217.     if(ia!=20)
  218.     {
  219.         SocketError("sendto error",WSAGetLastError());
  220.     }
  221.  
  222.     closesocket(sock);
  223.  
  224. }
  225.  
  226. void CloseWinsock ( void )
  227. {
  228.     WSACleanup();
  229. }
  230. ----cut----
  231. ----cut----
  232.  
  233.  
  234. //GetProfileString()
  235.  
  236. #include <windows.h>
  237. #define _INC_WINDOWS
  238. #include <winsock.h>
  239.  
  240. WSADATA wsaData;
  241.  
  242. void SocketError ( char *,int );
  243. long FAR PASCAL _export WndProc (HWND, UINT, UINT, LONG) ;
  244. unsigned char OpenWinsock ( void );
  245. unsigned char BodyWinsock ( void );
  246. void CloseWinsock ( void );
  247. char appname[40];
  248.  
  249. int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance,LPSTR lpszCmdLine,
  250.     int nCmdShow)
  251. {
  252.     static char szAppName[]="sock";
  253.     HWND hwnd;
  254.     MSG msg;
  255.     WNDCLASS wndclass;
  256.  
  257.     if(OpenWinsock()) return(0);
  258.  
  259.     if(!hPrevInstance)
  260.     {
  261.         wndclass.style        =CS_HREDRAW|CS_VREDRAW;
  262.         wndclass.lpfnWndProc  =WndProc;
  263.         wndclass.cbClsExtra   =0;
  264.         wndclass.cbWndExtra   =0;
  265.         wndclass.hInstance    =hInstance;
  266.         wndclass.hIcon        =LoadIcon(NULL,IDI_APPLICATION);
  267.         wndclass.hCursor      =LoadCursor(NULL,IDC_ARROW);
  268.         wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
  269.         wndclass.lpszMenuName =NULL;
  270.         wndclass.lpszClassName=szAppName;
  271.         RegisterClass (&wndclass) ;
  272.     }
  273.     hwnd=CreateWindow (szAppName,appname,WS_OVERLAPPEDWINDOW,
  274.         CW_USEDEFAULT,CW_USEDEFAULT,250,280,NULL,NULL,hInstance,NULL);
  275.  
  276.     ShowWindow(hwnd,nCmdShow);
  277.     UpdateWindow(hwnd);
  278.  
  279.     while(GetMessage(&msg,NULL,0,0))
  280.     {
  281.         TranslateMessage(&msg);
  282.         DispatchMessage (&msg);
  283.     }
  284.  
  285.     CloseWinsock();
  286.  
  287.     return(msg.wParam);
  288. }
  289.  
  290. long FAR PASCAL _export WndProc(HWND hwnd,UINT message,UINT wParam,LONG lParam)
  291. {
  292.      static HWND hwndButton[64];
  293.      char sa[8];
  294.      int i;
  295.  
  296.      switch(message)
  297.      {
  298.         case WM_CREATE:
  299. /*
  300.             for(i=0;i<64;i++)
  301.             {
  302.                 wsprintf(sa,"%02u",i);
  303.                 hwndButton[i]=CreateWindow("button",sa,
  304.                     WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,(i&7)*30,(i>>3)*30,30,30,
  305.                     hwnd,i,((LPCREATESTRUCT)lParam)->hInstance,NULL);
  306.             }
  307. */
  308.             PostMessage(hwnd,WM_COMMAND,0,0);
  309.             return(0);
  310.  
  311.         case WM_SIZE:
  312.             break;
  313.  
  314.         case WM_PAINT:
  315.             break;
  316.  
  317.         case WM_COMMAND:
  318.             BodyWinsock();
  319.             PostQuitMessage(0);
  320.  
  321.  
  322.         /*
  323.             switch(wParam)
  324.             {
  325.             }
  326.             as seen in the CreateWindow() above (WM_CREATE) the wParam is 0-63
  327.         */
  328.             return(0);
  329.  
  330.         case WM_DRAWITEM:
  331.             break;
  332.  
  333.         case WM_DESTROY:
  334.             PostQuitMessage(0);
  335.             return(0);
  336.     }
  337.     return DefWindowProc(hwnd,message,wParam,lParam);
  338. }
  339.  
  340. unsigned char OpenWinsock ( void )
  341. {
  342.     unsigned char gstring[80];
  343.     int ia;
  344.     HOSTENT *host;
  345.  
  346.     if(WSAStartup(0x0101,&wsaData))
  347.     {
  348.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  349.         return(1);
  350.     }
  351.  
  352.     if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
  353.     {
  354.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  355.         WSACleanup();
  356.         return(1);
  357.     }
  358.     wsaData.wVersion=0x0101;
  359.     wsaData.wHighVersion=0x0101;
  360.  
  361.     ia=gethostname(gstring,80);
  362.     if(ia)
  363.     {
  364.         SocketError("gethostname error",WSAGetLastError());
  365.     }
  366.     else
  367.     {
  368.         host=gethostbyname(gstring);
  369.         if(host==NULL)
  370.         {
  371.             SocketError("gethostbyname error",WSAGetLastError());
  372.             return(1);
  373.         }
  374.         else
  375.         {
  376.             if(host[0].h_addrtype!=2)
  377.             {
  378.                 MessageBox(NULL,"Unknown addres type",appname,MB_OK);
  379.                 return(1);
  380.             }
  381.             if(host[0].h_length!=4)
  382.             {
  383.                 MessageBox(NULL,"Unknown address length",appname,MB_OK);
  384.                 return(1);
  385.             }
  386.             wsprintf(appname,"%s %u.%u.%u.%u R",host[0].h_name,(unsigned char)host[0].h_addr_list[0][0],(unsigned char)host[0].h_addr_list[0][1],(unsigned char)host[0].h_addr_list[0][2],(unsigned char)host[0].h_addr_list[0][3]);
  387.         }
  388.     }
  389.     return(0);
  390. }
  391.  
  392. unsigned char BodyWinsock ( void )
  393. {
  394.     unsigned char gstring[80];
  395.     SOCKET sock;
  396.     int ia;
  397.     SOCKADDR s;
  398.     int ss;
  399.  
  400.     sock=socket(PF_INET,SOCK_DGRAM,0);
  401.     if(sock==INVALID_SOCKET)
  402.     {
  403.         SocketError("socket error",WSAGetLastError());
  404.         return(1);
  405.     }
  406.  
  407. // select() to check status before sending another
  408.  
  409. /*
  410.     ia=connect(sock,(LPSOCKADDR)&sin,sizeof(sin));
  411.     if(ia)
  412.     {
  413.         SocketError("connect error",WSAGetLastError());
  414.     }
  415.  
  416.     ia=recv(sock,gstring,20,0);
  417. */
  418.     ia=recvfrom(sock,gstring,20,0,&s,&ss);
  419.     if(ia==SOCKET_ERROR)
  420.     {
  421.         SocketError("recv error",WSAGetLastError());
  422.     }
  423.     else
  424.     {
  425.         MessageBox(NULL,gstring,"SUCCESS",MB_OK);
  426.     }
  427.  
  428.     closesocket(sock);
  429.  
  430. }
  431.  
  432. void CloseWinsock ( void )
  433. {
  434.     WSACleanup();
  435. }
  436. ---- cut ----
  437. ---- cut ----
  438.  
  439. #include <windows.h>
  440. #include <winsock.h>
  441.  
  442.  
  443. void SocketError ( char *s,int e )
  444. {
  445.     char hello[80];
  446.     switch(e)
  447.     {
  448.         case WSAEINTR:   MessageBox(NULL,"WSAEINTR",s,MB_OK); break;
  449.         case WSAEBADF:   MessageBox(NULL,"WSAEBADF",s,MB_OK); break;
  450.         case WSAEACCES:   MessageBox(NULL,"WSAEACCESS",s,MB_OK); break;
  451.         case WSAEFAULT:   MessageBox(NULL,"WSAEFAULT",s,MB_OK); break;
  452.         case WSAEINVAL:   MessageBox(NULL,"WSAEINVAL",s,MB_OK); break;
  453.         case WSAEMFILE:   MessageBox(NULL,"WSAEMFILE",s,MB_OK); break;
  454.         case WSAEWOULDBLOCK:   MessageBox(NULL,"WSAEWOULDBLOCK",s,MB_OK); break;
  455.         case WSAEINPROGRESS:   MessageBox(NULL,"WSAEINPROGRESS",s,MB_OK); break;
  456.         case WSAEALREADY:   MessageBox(NULL,"WSAEALREADY",s,MB_OK); break;
  457.         case WSAENOTSOCK:   MessageBox(NULL,"WSAENOTSOCK",s,MB_OK); break;
  458.         case WSAEDESTADDRREQ:   MessageBox(NULL,"WSAEDESTADDRREQ",s,MB_OK); break;
  459.         case WSAEMSGSIZE:   MessageBox(NULL,"WSAEMSGSIZE",s,MB_OK); break;
  460.         case WSAEPROTOTYPE:   MessageBox(NULL,"WSAEPROTOTYPE",s,MB_OK); break;
  461.         case WSAENOPROTOOPT:   MessageBox(NULL,"WSAENOPROTOOPT",s,MB_OK); break;
  462.         case WSAEPROTONOSUPPORT:   MessageBox(NULL,"WSAEPROTONOSUPPORT",s,MB_OK); break;
  463.         case WSAESOCKTNOSUPPORT:   MessageBox(NULL,"WSAESOCKTNOSUPPORT",s,MB_OK); break;
  464.         case WSAEOPNOTSUPP:   MessageBox(NULL,"WSAEOPNOTSUPP",s,MB_OK); break;
  465.         case WSAEPFNOSUPPORT:   MessageBox(NULL,"WSAEPFNOSUPPORT",s,MB_OK); break;
  466.         case WSAEAFNOSUPPORT:   MessageBox(NULL,"WSAEAFNOSUPPORT",s,MB_OK); break;
  467.         case WSAEADDRINUSE:   MessageBox(NULL,"WSAEADDRINUSE",s,MB_OK); break;
  468.         case WSAEADDRNOTAVAIL:   MessageBox(NULL,"WSAEADDRNOTAVAIL",s,MB_OK); break;
  469.         case WSAENETDOWN:   MessageBox(NULL,"WSAENETDOWN",s,MB_OK); break;
  470.         case WSAENETUNREACH:   MessageBox(NULL,"WSAENETUNREACH",s,MB_OK); break;
  471.         case WSAENETRESET:   MessageBox(NULL,"WSAENETRESET",s,MB_OK); break;
  472.         case WSAECONNABORTED:   MessageBox(NULL,"WSAECONNABORTED",s,MB_OK); break;
  473.         case WSAECONNRESET:   MessageBox(NULL,"WSAECONNRESET",s,MB_OK); break;
  474.         case WSAENOBUFS:   MessageBox(NULL,"WSAENOBUFS",s,MB_OK); break;
  475.         case WSAEISCONN:   MessageBox(NULL,"WSAEISCONN",s,MB_OK); break;
  476.         case WSAENOTCONN:   MessageBox(NULL,"WSAENOTCONN",s,MB_OK); break;
  477.         case WSAESHUTDOWN:   MessageBox(NULL,"WSAESHUTDOWN",s,MB_OK); break;
  478.         case WSAETOOMANYREFS:   MessageBox(NULL,"WSAETOOMANYREFS",s,MB_OK); break;
  479.         case WSAETIMEDOUT:   MessageBox(NULL,"WSAETIMEDOUT",s,MB_OK); break;
  480.         case WSAECONNREFUSED:   MessageBox(NULL,"WSAECONNREFUSED",s,MB_OK); break;
  481.         case WSAELOOP:   MessageBox(NULL,"WSAELOOP",s,MB_OK); break;
  482.         case WSAENAMETOOLONG:   MessageBox(NULL,"WSAENAMETOOLONG",s,MB_OK); break;
  483.         case WSAEHOSTDOWN:   MessageBox(NULL,"WSAEHOSTDOWN",s,MB_OK); break;
  484.         case WSAEHOSTUNREACH:   MessageBox(NULL,"WSAEHOSTUNREACH",s,MB_OK); break;
  485.         case WSAENOTEMPTY:   MessageBox(NULL,"WSAENOTEMPTY",s,MB_OK); break;
  486.         case WSAEPROCLIM:   MessageBox(NULL,"WSAEPROCLIM",s,MB_OK); break;
  487.         case WSAEUSERS:   MessageBox(NULL,"WSAEUSERS",s,MB_OK); break;
  488.         case WSAEDQUOT:   MessageBox(NULL,"WSAEDQUIT",s,MB_OK); break;
  489.         case WSAESTALE:   MessageBox(NULL,"WSAESTALE",s,MB_OK); break;
  490.         case WSAEREMOTE:   MessageBox(NULL,"WSAEREMOTE",s,MB_OK); break;
  491.         case WSAEDISCON:   MessageBox(NULL,"WSAEDISCON",s,MB_OK); break;
  492.         case WSASYSNOTREADY:   MessageBox(NULL,"WSAESYSNOTREADY",s,MB_OK); break;
  493.         case WSAVERNOTSUPPORTED:   MessageBox(NULL,"WSAVERNOTSUPPORTED",s,MB_OK); break;
  494.         case WSANOTINITIALISED:   MessageBox(NULL,"WSANOTINITIALISED",s,MB_OK); break;
  495.         case WSAHOST_NOT_FOUND:   MessageBox(NULL,"WSAHOST_NOT_FOUND",s,MB_OK); break;
  496.         case WSATRY_AGAIN:   MessageBox(NULL,"WSATRY_AGAIN",s,MB_OK); break;
  497.         case WSANO_RECOVERY:   MessageBox(NULL,"WSANO_RECOVERY",s,MB_OK); break;
  498.         case WSANO_DATA:   MessageBox(NULL,"WSANO_DATA",s,MB_OK); break;
  499.         default: wsprintf(hello,"Unknown error %d",e);
  500.         MessageBox(NULL,hello,s,MB_OK); break;
  501.     }
  502. }
  503. ---- cut ----
  504.  
  505.  
  506.